﻿#-------------------------------------------------------------------------------
# Name:        smsSender
# Purpose:     bot for sending sms on xmpp (base on mrim.jabber.ru)
#
# Author:      free_kode
#
# Created:     22.07.2011
# Copyright:   (c) free_kode 2011
# Licence:     GNU GPL
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import sys,os,xmpp,time

iqInbox = ''

def messageIncoming(con, msg):
    print 'message = ', msg.getBody()
    pass

def iqIncoming(con,iq):
    global iqInbox
    iqInbox = iq
    print '\nIq = ',iqInbox.getCDATA()

def smsSend():
    global iqInbox

    login = 'mustdieme@jabber.ru/bot'
    password = 'eLKWd8LuAm'
    number = '+79506743650'
    smsText = 'no porno'
    translit = 0 #не понадобиться пока, тк русскую кодировку не поддерживает питон мой

    level1 = []
    level2 = []
    level3 = []

    jid = xmpp.JID(login)
    botClient = xmpp.Client(jid.getDomain(),debug=[])

    con=botClient.connect()
    if not con:
        print 'could not connect!'
        sys.exit()
    print 'connected with',con
    auth=botClient.auth(jid.getNode(),password,resource=jid.getResource())
    if not auth:
        print 'could not authenticate!'
        sys.exit()
    print 'authenticated using',auth

    botClient.sendInitPresence()
    botClient.RegisterHandler('message', messageIncoming)
    botClient.RegisterHandler('iq', iqIncoming)

    time.sleep(2)
    botClient.Process(1)

    ses = '0'
    field0_attrs = {'type':'text-single', #формирование запроса самой смс
                    'var':'number'}
    field1_attrs = {'type':'text-multi', #уровень1.1
                    'var':'text'}
    field2_attrs = {'type':'boolean', #уровень1.2
                    'var':'translit'}
    field_attrs_all = (field0_attrs,field1_attrs,field2_attrs)
    dataTag = (number,smsText,translit)

    i=0
    while i<=2:
        field = xmpp.Node('field',attrs=field_attrs_all[i]) #уровень1.0
        field.setTagData('value',dataTag[i]) #уровень0
        level1.append(field)
        i+=1

    nodeX_attrs = {'type':'submit'}
    nodeX = xmpp.Node('x',attrs=nodeX_attrs)
    nodeX.setNamespace(xmpp.NS_DATA)
    nodeX.setPayload(level1) #не трогать!!! работает через жопу, не знаю как
    level2.append(nodeX)

    nodeCommand_attrs = {'node':'sms',
                         'sessionid': ses}
    nodeCommand = xmpp.Node('command',attrs=nodeCommand_attrs)
    nodeCommand.setNamespace(xmpp.NS_COMMANDS)
    nodeCommand.setPayload(level2)
    level3.append(nodeCommand)  #оказывается массивы почему-то реально объединились, nodeCommand последний узел
#перед отправкой, теперь надо сформировать запрос, а лан потом расскажу, вобщем вверху поставил что массивы равны
#так они и дальше оказались равны лол

    smsRequest = xmpp.Iq(typ='set',  to='mrim.jabber.ru')
    smsRequest.setPayload(level3)
    print smsRequest
    botClient.send(smsRequest) #отправляем смску
    botClient.disconnect()
    print 'disconnect'

    return 0

if __name__ == '__main__':
    smsSend()